#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

#define N	128

static void parse_string(char *ptr, char **str, int n);

int main(void)
{
	char *lineptr = NULL;
	size_t n = 0;
	char *str[N] = {};
	pid_t pid;

	while (1) {
		if (-1 == getline(&lineptr, &n, stdin)) {
			perror("getline()");
			break;
		}
		// lineptr = "ls -l"
		// 切割 " \t\n"
		parse_string(lineptr, str, N);

		pid = fork();
		if (-1 == pid) {
			perror("fork()");
			exit(1);
		}
		if (0 == pid) {
			execvp(str[0], str);	
			perror("evecvp()");
			exit(1);
		}
		wait(NULL);	
		memset(lineptr, '\0', n);
	}

	return 0;
}

static void parse_string(char *ptr, char **str, int n)
{
	int i;
	char *ret;

	for (i = 0; i < n - 1; i++) {
		ret = strsep(&ptr, " \t\n");
		if (NULL == ret)
			break;
		if (strcmp(ret, "") == 0) {
			// ls   -l
			i--;
			continue;
		}
		str[i] = ret;
	}
	str[i] = NULL;
}



